跳到主要内容

可视化着色器实现物体溶解效果

本节我们将使用空间着色器制作一个物体溶解的效果,并使用可视化着色器编辑器实现。

备注

这个教程假定你对着色器有一些基本的了解,例如类型( vec2 , float ),函数,内置变量(TIME)的使用,以及noise的概念。如果你对这些概念摸不着头脑,那么你在完成这个教程之前,最好先从 The Book of Shaders 获取一些基本知识。

设置

我们使用一个空场景来进行操作,首先向场景添加一个新的 MeshInstance 节点。

在属性面板中,点击“网格”旁边的“[空]”,然后选择“新建SphereMesh”。

这会在场景中添加一个SphereMesh。

之后点击“材质”下方的“[空]”,创建一个ShaderMaterial,并创建一个VisualShader。点击VisualShader会弹出编辑界面。

创建噪声贴图(noisetexture)

为了更好的实现溶解的效果,我们需要制作一张噪声贴图,首先让我们新建一个noisetexture资源:

create_noisetexture

之后,我们需要创建一个OpenSimplexNoise:

create_OpenSimplexNoise

至此,我们的噪声贴图已经创建完毕。

编写着色器

接下来让我们正式开始编写着色器的工作,我们这个只需要在片段方法中进行编辑,所以确保你已经切换到片段方法:

change_to_fragment

首先,让我们创建两个Input节点,一个是UV,用于后续将噪声贴图映射到材质上;一个是time,用于实现溶解的动态效果,我们可以点击模块右上角的眼睛符号来预览当前的颜色效果,这是代码着色器所没有的优势。

create_uv_and_time

之后将刚才做的噪声贴图资源拖入着色器编辑器,并将uv连接:

import_noisetexture

接下来我们需要将time的大小限制在-0.5-0.5,这里我们使用sin以及除法实现:

time_range

然后我们需要将纹理贴图的颜色减去上面算出的time范围以实现颜色动态改变的效果,并使用step方法进行四舍五入,那么算出的值也就固定为0或者1,每一步你都可以通过预览来查看是否达到你预期的效果:

preview_effect

最后一步,我们需要怎么做?相信你也已经知道了,没错,要想实现一个物体逐渐消失的效果,改动的一般都是透明度(Alpha),所以将最终的计算结果连向Ouput的Alpha即可:

final_visual_code

如果上面的步骤你都做对了,那么你能看到创建的那个球体实例已经有了溶解的效果:

final_effect